package com.zf.study.message;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 消息协议解析器
 * 用于解析客户端发送的消息并识别命令类型
 */
public class MessageParser {
    
    // 私聊消息的正则表达式，格式: @用户名 消息内容
    private static final Pattern PRIVATE_MESSAGE_PATTERN = Pattern.compile("@(\\S+)\\s+(.+)");
    
    /**
     * 解析消息并返回对应的消息类型
     * @param message 客户端发送的消息
     * @return 消息类型
     */
    public static MessageType parseMessageType(String message) {
        if (message == null || message.trim().isEmpty()) {
            return MessageType.UNKNOWN;
        }
        
        String trimmedMessage = message.trim();
        
        // 检查是否是帮助命令
        if (trimmedMessage.equals("/help")) {
            return MessageType.HELP;
        }
        
        // 检查是否是列出用户命令
        if (trimmedMessage.equals("/users")) {
            return MessageType.LIST_USERS;
        }
        
        // 检查是否是退出命令
        if (trimmedMessage.equals("/quit")) {
            return MessageType.QUIT;
        }
        
        // 检查是否是私聊消息
        if (isPrivateMessage(trimmedMessage)) {
            return MessageType.PRIVATE_CHAT;
        }

        //心跳通知
        if(trimmedMessage.equals(HeartBeatMessage.HEARTBEAT_RESPONSE)){
            return MessageType.HEARTBEAT;
        }
        
        // 默认为普通聊天消息
        return MessageType.CHAT;
    }
    
    /**
     * 判断是否是私聊消息
     * @param message 消息内容
     * @return 是否是私聊消息
     */
    public static boolean isPrivateMessage(String message) {
        return PRIVATE_MESSAGE_PATTERN.matcher(message).matches();
    }
    
    /**
     * 解析私聊消息，提取目标用户和消息内容
     * @param message 私聊消息
     * @return 包含目标用户和消息内容的数组，[0]为目标用户，[1]为消息内容
     */
    public static String[] parsePrivateMessage(String message) {
        Matcher matcher = PRIVATE_MESSAGE_PATTERN.matcher(message);
        if (matcher.matches()) {
            return new String[]{matcher.group(1), matcher.group(2)};
        }
        return new String[]{"", ""};
    }
}